package tools

import (
	"flag"
	"log"
)

/*
 +----------------------------------------------------------------------
 + Title        : 初始化项目
 + Author       : huwl
 + Version      : 1.0.0
 + Initial-Time : 2020-01-06
 + Last-time    : 这个文件最后修改的时间 + 修改人的名称
 + Desc         : 初始化项目
 +----------------------------------------------------------------------
*/

// 运行环境
var Env string

// 服务模式
var ServiceMode string

// 服务名称
var ServiceName string

// 服务版本
var ServiceVersion string

// 服务地址
var ServiceHost string

// 服务端口
var ServicePort string

// 上传图片域名
var UploadImageDomain string

// 服务注册
var ServiceRegistry string

// 配置中心
var ConfigCenter string

// 限流
var Qps int

// 配置中心 mysql 名称
var MySqlConfigCenter string

// 配置中心 redis 名称
var RedisConfigCenter string

// -------------------------- DTM 配置开始 -------------------------
// dtm grpc 服务地址
var DtmGrpcServer string

// dtm http 服务地址
var DtmHttpServer string

// dtm jrpc 服务地址
var DtmJgrpcServer string

// http 服务
var HttpServiceUrl string

// -------------------------- DTM 配置结束 -------------------------

// ---------------------- Zap 日志相关参数开始 ----------------------
// 日志级别
var LogLevel string

var ZapLoggerMaxSize int
var ZapLoggerMaxBackups int
var ZapLoggerMaxAge int
var ZapLoggerCompress bool

// ---------------------- Zap 日志相关参数结束 ----------------------

// --------------------- Jaeger 链路跟踪参数开始 --------------------
// Jaeger Agent 地址
var JaegerAgentURL string

// --------------------- Jaeger 链路跟踪参数结束 --------------------

func init() {
	// 设置日志标志：添加 Llongfile 或 Lshortfile
	log.SetFlags(log.LstdFlags | log.Llongfile) // 完整路径
	// 或者
	// log.SetFlags(log.LstdFlags | log.Lshortfile) // 短路径

	appConfig, err := GetConfig("app", "yml")
	if err != nil {
		log.Fatalf("获取项目配置信息错误: %v", err)
	}

	// ------------------ zaplogger 开始 ------------------
	ZapLoggerMaxSize = appConfig.GetInt(Env + ".zlogger_maxsize")
	ZapLoggerMaxBackups = appConfig.GetInt(Env + ".zlogger_max_backups")
	ZapLoggerMaxAge = appConfig.GetInt(Env + ".zlogger_max_age")
	ZapLoggerCompress = appConfig.GetBool(Env + ".zlogger_compress")
	// ------------------ zaplogger 结束 ------------------

	// 运行环境
	flag.StringVar(&Env, "env", "dev", "运行环境")
	flag.Parse()

	log.Println("当前运行环境：", Env)

	// 获取服务名称
	ServiceName = appConfig.GetString("service_name")

	// 获取服务版本
	ServiceVersion = appConfig.GetString("service_version")

	// 获取服务地址
	ServiceHost = appConfig.GetString(Env + ".service_host")

	// 获取服务端口
	ServicePort = appConfig.GetString(Env + ".service_port")

	// 获取服务发现
	ServiceRegistry = appConfig.GetString(Env + ".service_registry")

	// 配置中心
	ConfigCenter = appConfig.GetString(Env + ".config_center")

	// 限流
	Qps = appConfig.GetInt(Env + ".qps")

	// 配置中心 mysql 名称
	MySqlConfigCenter = appConfig.GetString("mysql_config_center")

	// 配置中心 redis 名称
	RedisConfigCenter = appConfig.GetString("redis_config_center")

	// 日志级别
	LogLevel = appConfig.GetString("log_level")

	// Jaeger Agent 地址
	JaegerAgentURL = appConfig.GetString(Env + ".jaeger_agent_url")

	// proto3字段值为空时被忽略问题
	RemoveProtoJsonOmitempty("./proto/user/user.pb.go")
}
